From 265853a73b8e287b997b988ac49b0b8c22fe3900 Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Tue, 15 Aug 2006 16:26:39 +0100 Subject: [PATCH] Set the close-on-exec flag on the RPC socket in tool stack. Signed-off-by: Daniel P. Berrange --- tools/python/xen/util/xmlrpclib2.py | 12 ++++++++++++ tools/python/xen/web/httpserver.py | 7 +++++++ 2 files changed, 19 insertions(+) diff --git a/tools/python/xen/util/xmlrpclib2.py b/tools/python/xen/util/xmlrpclib2.py index 5231881d22..b353b1cf00 100644 --- a/tools/python/xen/util/xmlrpclib2.py +++ b/tools/python/xen/util/xmlrpclib2.py @@ -22,6 +22,7 @@ An enhanced XML-RPC client/server interface for Python. import string import types +import fcntl from httplib import HTTPConnection, HTTP from xmlrpclib import Transport @@ -136,6 +137,17 @@ class TCPXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer): logRequests=1): SimpleXMLRPCServer.__init__(self, addr, requestHandler, logRequests) + flags = fcntl.fcntl(self.fileno(), fcntl.F_GETFD) + flags |= fcntl.FD_CLOEXEC + fcntl.fcntl(self.fileno(), fcntl.F_SETFD, flags) + + def get_request(self): + (client, addr) = SimpleXMLRPCServer.get_request(self) + flags = fcntl.fcntl(client.fileno(), fcntl.F_GETFD) + flags |= fcntl.FD_CLOEXEC + fcntl.fcntl(client.fileno(), fcntl.F_SETFD, flags) + return (client, addr) + def _marshaled_dispatch(self, data, dispatch_method = None): params, method = xmlrpclib.loads(data) if False: diff --git a/tools/python/xen/web/httpserver.py b/tools/python/xen/web/httpserver.py index 568a169d58..bcf5dbd6b1 100644 --- a/tools/python/xen/web/httpserver.py +++ b/tools/python/xen/web/httpserver.py @@ -24,6 +24,7 @@ import types from urllib import quote, unquote import os import os.path +import fcntl from xen.xend import sxp from xen.xend.Args import ArgError @@ -294,6 +295,9 @@ class HttpServer: def bind(self): self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + flags = fcntl.fcntl(self.socket.fileno(), fcntl.F_GETFD) + flags |= fcntl.FD_CLOEXEC + fcntl.fcntl(self.socket.fileno(), fcntl.F_SETFD, flags) self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.socket.bind((self.interface, self.port)) @@ -338,3 +342,6 @@ class UnixHttpServer(HttpServer): def bind(self): self.socket = unix.bind(self.path) + flags = fcntl.fcntl(self.socket.fileno(), fcntl.F_GETFD) + flags |= fcntl.FD_CLOEXEC + fcntl.fcntl(self.socket.fileno(), fcntl.F_SETFD, flags) -- 2.30.2